/**
 * Mozgó szörny
 */
public class Tracker extends Monster
{
  private int follow = 2; // Követési irány

  
  /**
   * Keresi a játékosokat, a szomszésod mezőkön majd a 2 távolságra lévő mezőkön
   */
  protected void search()
  {
    for (int i = 1 ; i <= 6; i++)
    {
      Field neighbour = field.getNeighbour(i);
      if(neighbour != null && neighbour.isEmpty())
      {
        Field neighbour2 = field.getNeighbour(i).getNeighbour(i);
        if(neighbour2 != null && !neighbour2.isEmpty() )
        {  
          if ( (neighbour2.getEntity() == field.getGame().getPlayer(1))
              || (neighbour2.getEntity() == field.getGame().getPlayer(0))
             )
          {
            follow = i;
            break;
          }
        }
      }
      else
      {
        follow = 0;
      }        
    }
  }

  public boolean explode()
  {
    field.getGame().getTimer().remove(this);
    field.delete();
    alive = false;
    callObservers();
    return true;
  }

  public boolean kill()
  {
    field.getGame().getTimer().remove(this);
    field.delete();
    alive = false;
    callObservers();
    return true;
  }

  /**
   * Ha követ valakit arra lép amúgy 1-6 ig sorba próbálkozik a mezőkkel.
   * Ha lépett meghívja az eatIt()-et.
   */
  private void doMove()
  {
      if(follow != 0)
      {
        Field neighbour = field.getNeighbour(follow);
        if(neighbour != null && neighbour.isEmpty())
        {
            field.delete();
            field.getNeighbour(follow).add(this);
        }
      }
      else
      {
          for (int i = 1 ; i <= 6; i++)
          {
            Field neighbour = field.getNeighbour(i);
            if(neighbour != null && neighbour.isEmpty())
            {
                field.delete();
                field.getNeighbour(i).add(this);
                break;
            }
          }
      }
    callObservers();
    activate();
  }
  /**
   *  A szörny mozgását időzítő, timer által hívott függvény.
   * Meghívja a keresés majd a lépés függvényt.(search(),move();)
   */
  public void tick()
  {
    doMove();
    search();
  }

  public String toString()
  {
     return "tracker["+ID+"]";
  }
}